package com.xnx3.j2ee.entity;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 * 用户表。用户信息、登录信息等都是在这里
 */
@Entity
@Table(name = "user")
public class User extends BaseEntity implements java.io.Serializable{
	
	private Integer id;		//用户id
	private String username;	//用户名，限制40字符
	private String email;		//邮箱
	private String password;	//加密后的密码
	private String head;		//头像,图片文件名，如 29.jpg
	private String nickname;	//昵称
	private String authority;	//用户权限,主要纪录表再user_role表，一个用户可以有多个权限。多个权限id用,分割，如2,3,5   目前最多存放10个字符
	private Integer regtime;	//注册时间,时间戳
	private Integer lasttime;	//最后登录时间,时间戳
	private String regip;		//注册ip
	private String lastip;		//最后一次登陆的ip
	private String salt;		//shiro加密使用
	private String phone;		//手机号
	private Integer currency;	//资金，可以是积分、金币、等等站内虚拟货币。具体货币名字在system表，name=CURRENCY_NAME 通过后台－系统设置进行配置
	private Integer referrerid;	//推荐人的用户id。若没有推荐人则默认为0。推荐人可在system表中设置四级下线是否开启以及奖励
	private Integer money;		//账户可用余额，金钱,RMB，单位：分
	private Integer freezemoney;	//账户冻结余额，金钱,RMB，单位：分
	private Short isfreeze;		//是否已冻结，1已冻结（拉入黑名单），0正常
	private String sex;			//性别，三个值：男、女、未知
	private String sign;		//用户签名,限制100个字符
	
	private Integer version;
	
	/** 斑马回收相关添加 */
	private Integer allSellWgight;	//总出售垃圾的重量，单位是g，注意不是kg，是g，斑马回收增加
	private Integer allOrderNumbe;	//总的订单完成次数，只有骑手上门取货完成付钱完成的，才记录到这里。斑马回收增加
	private Integer allIncomeMone;	//总收入金额，只要骑手付的钱都会在这里进行增加。单位是分。注意这个只是总的收入记录，只是一个记录而已。并不是余额，余额是money字段。斑马回收增加
	private String grade;	//用户等级,例如:一级,二级。默认一级,一级最低
	private double longitude;	//经度
	private double latitude;	//纬度
	private Integer dailishangUserid;	//代理商用户id,关联user.id
	private Integer wanggeUserid;	//网格用户id,关联user.id
	private Integer lotteryDrawCount ;//抽奖次数,默认0, 仅限当日使用, 0点清零

	/** default constructor */
	public User() {
	}
	/**
	 * 手机号
	 * @return
	 */
	public String getPhone() {
		return phone;
	}
	/**
	 * 手机号
	 * @param phone
	 */
	public void setPhone(String phone) {
		this.phone = phone;
	}

	/**
	 * 用户id
	 * @return
	 */
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	/**
	 * 用户id
	 * @param id
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * 用户名
	 * @return
	 */
	@Column(name = "username", columnDefinition="char(40) comment '用户名，登录使用'")
	public String getUsername() {
		return this.username;
	}
	
	/**
	 * 用户名
	 * @param username
	 */
	public void setUsername(String username) {
		this.username = username;
	}
	/**
	 * 邮箱
	 * @return
	 */
	public String getEmail() {
		return this.email;
	}
	/**
	 * 邮箱
	 * @param email
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	/**
	 * 密码，+salt加密后的密码
	 * @return
	 */
	@Column(name = "password", nullable = false, length = 50)
	public String getPassword() {
		return this.password;
	}
	/**
	 * 密码，+salt加密后的密码
	 * @param password
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	/**
	 * 头像,图片文件名，如 29.jpg
	 * @return
	 */
	@Column(name = "head", length = 15)
	public String getHead() {
		return this.head;
	}
	/**
	 * 头像,图片文件名，如 29.jpg
	 * @param head
	 */
	public void setHead(String head) {
		this.head = head;
	}
	
	/**
	 * 昵称
	 * @return
	 */
	@Column(name = "nickname", columnDefinition="char(40) comment '用户名昵称，仅仅只是显示'")
	public String getNickname() {
		return this.nickname;
	}
	
	/**
	 * 昵称
	 * @param nickname
	 */
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	/**
	 * 用户权限,主要纪录表再user_role表，一个用户可以有多个权限。多个权限id用,分割，如2,3,5   目前最多存放10个字符
	 * @return
	 */
	@Column(name = "authority", nullable = false)
	public String getAuthority() {
		return this.authority;
	}
	/**
	 * 用户权限,主要纪录表再user_role表，一个用户可以有多个权限。多个权限id用,分割，如2,3,5   目前最多存放10个字符
	 * @param authority
	 */
	public void setAuthority(String authority) {
		this.authority = authority;
	}
	/**
	 * 注册时间,时间戳
	 * @return
	 */
	@Column(name = "regtime", nullable = false)
	public Integer getRegtime() {
		return this.regtime;
	}
	/**
	 * 注册时间,时间戳
	 * @param regtime
	 */
	public void setRegtime(Integer regtime) {
		this.regtime = regtime;
	}

	@Column(name = "lasttime", nullable = false)
	public Integer getLasttime() {
		return this.lasttime;
	}

	public void setLasttime(Integer lasttime) {
		this.lasttime = lasttime;
	}
	/**
	 * 注册ip
	 * @return
	 */
	@Column(name = "regip", nullable = false, length = 15)
	public String getRegip() {
		return this.regip;
	}
	/**
	 * 注册ip
	 * @param regip
	 */
	public void setRegip(String regip) {
		this.regip = regip;
	}
	/**
	 * shiro加密使用
	 * @return
	 */
	public String getSalt() {
		return salt;
	}
	/**
	 * shiro加密使用
	 * @param salt
	 */
	public void setSalt(String salt) {
		this.salt = salt;
	}
	/**
	 * 资金，可以是积分、金币、等等站内虚拟货币。具体货币名字在system表，name=CURRENCY_NAME 通过后台－系统设置进行配置
	 * @return
	 */
	public Integer getCurrency() {
		return currency;
	}
	/**
	 * 资金，可以是积分、金币、等等站内虚拟货币。具体货币名字在system表，name=CURRENCY_NAME 通过后台－系统设置进行配置
	 * @param currency
	 */
	public void setCurrency(Integer currency) {
		this.currency = currency;
	}
	/**
	 * 推荐人的用户id。若没有推荐人则默认为0。推荐人可在system表中设置四级下线是否开启以及奖励
	 * @return
	 */
	public Integer getReferrerid() {
		return referrerid;
	}
	/**
	 * 推荐人的用户id。若没有推荐人则默认为0。推荐人可在system表中设置四级下线是否开启以及奖励
	 * @param referrerid
	 */
	public void setReferrerid(Integer referrerid) {
		this.referrerid = referrerid;
	}
	/**
	 * 最后一次登陆的ip
	 * @return
	 */
	public String getLastip() {
		return lastip;
	}
	/**
	 * 最后一次登陆的ip
	 * @param lastip
	 */
	public void setLastip(String lastip) {
		this.lastip = lastip;
	}
	/**
	 * 账户可用余额，金钱,RMB，单位：元
	 * @return
	 */
	public Integer getMoney() {
		return money;
	}
	/**
	 * 账户可用余额，金钱,RMB，单位：元
	 * @param money
	 */
	public void setMoney(Integer money) {
		this.money = money;
	}
	/**
	 * 账户冻结余额，金钱,RMB，单位：元
	 * @return
	 */
	public Integer getFreezemoney() {
		return freezemoney;
	}
	/**
	 * 账户冻结余额，金钱,RMB，单位：元
	 * @param freezemoney
	 */
	public void setFreezemoney(Integer freezemoney) {
		this.freezemoney = freezemoney;
	}
	/**
	 * 是否已冻结
	 * 		<ul>
	 * 			<li> {@link User#ISFREEZE_NORMAL}：正常 </li>
	 * 			<li> {@link User#ISFREEZE_FREEZE}：已冻结（拉入黑名单） </li>
	 * 		</ul>
	 * @return
	 */
	public Short getIsfreeze() {
		return isfreeze;
	}
	/**
	 * 是否已冻结
	 * 		<ul>
	 * 			<li> {@link User#ISFREEZE_NORMAL}：正常 </li>
	 * 			<li> {@link User#ISFREEZE_FREEZE}：已冻结（拉入黑名单） </li>
	 * 		</ul>
	 * @param isfreeze
	 */
	public void setIsfreeze(Short isfreeze) {
		this.isfreeze = isfreeze;
	}
	
	/**
	 * 性别，三个值：男、女、未知
	 * @return 三个值：
	 * 		<ul>
	 * 			<li>男
	 * 			<li>女
	 * 			<li>未知
	 * 		</ul>
	 */
	public String getSex() {
		return sex;
	}
	/**
	 * 性别，三个值：男、女、未知
	 * @param sex 值：
	 * 		<ul>
	 * 			<li>男
	 * 			<li>女
	 * 			<li>未知
	 * 		</ul>
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	/**
	 * 用户签名,限制50个汉字或100个英文字符
	 * @return
	 */
	public String getSign() {
		return sign;
	}
	/**
	 * 用户签名,限制50个汉字或100个英文字符
	 * @param sign
	 */
	public void setSign(String sign) {
		this.sign = sign;
	}
	
	@Version
	public Integer getVersion() {
	    return this.version;
	}
	public void setVersion(Integer version) {
	    this.version = version;
	}
	@Column(name = "all_sell_wgight", columnDefinition="int(11) COMMENT '总出售垃圾的重量，单位是g，注意不是kg，是g，斑马回收增加' default '0'")
	public Integer getAllSellWgight() {
		return allSellWgight;
	}
	public void setAllSellWgight(Integer allSellWgight) {
		if (allSellWgight == null) {
			allSellWgight = 0;
		}
		this.allSellWgight = allSellWgight;
	}
	@Column(name = "all_order_number", columnDefinition="int(11) COMMENT '总的订单完成次数，只有骑手上门取货完成付钱完成的，才记录到这里。斑马回收增加' default '0'")
	public Integer getAllOrderNumbe() {
		return allOrderNumbe;
	}
	public void setAllOrderNumbe(Integer allOrderNumbe) {
		if (allOrderNumbe == null) {
			allOrderNumbe = 0;
		}
		this.allOrderNumbe = allOrderNumbe;
	}
	@Column(name = "all_income_money", columnDefinition="int(11) COMMENT '总收入金额，只要骑手付的钱都会在这里进行增加。单位是分。注意这个只是总的收入记录，只是一个记录而已。并不是余额，余额是money字段。斑马回收增加' default '0'")
	public Integer getAllIncomeMone() {
		return allIncomeMone;
	}
	public void setAllIncomeMone(Integer allIncomeMone) {
		if (allIncomeMone == null) {
			allIncomeMone = 0;
		}
		this.allIncomeMone = allIncomeMone;
	}
	@Column(name = "grade", columnDefinition="char(10) COLLATE utf8_unicode_ci COMMENT '用户等级,例如:一级,二级。默认一级,一级最低' default ''")
	public String getGrade() {
		return grade;
	}
	public void setGrade(String grade) {
		this.grade = grade;
	}
	@Column(name = "longitude", columnDefinition="double(9) COMMENT '经度' default '0'")
	public double getLongitude() {
		return longitude;
	}
	public void setLongitude(double longitude) {
		this.longitude = longitude;
	}
	@Column(name = "latitude", columnDefinition="double(9) COMMENT '纬度' default '0'")
	public double getLatitude() {
		return latitude;
	}
	public void setLatitude(double latitude) {
		this.latitude = latitude;
	}
	@Column(name = "dailishang_userid", columnDefinition="int(11) COMMENT '代理商用户id,关联user.id' default '0'")
	public Integer getDailishangUserid() {
		return dailishangUserid;
	}
	public void setDailishangUserid(Integer dailishangUserid) {
		this.dailishangUserid = dailishangUserid;
	}
	@Column(name = "wangge_userid", columnDefinition="int(11) COMMENT '网格用户id,关联user.id' default '0'")
	public Integer getWanggeUserid() {
		return wanggeUserid;
	}
	public void setWanggeUserid(Integer wanggeUserid) {
		this.wanggeUserid = wanggeUserid;
	}
	@Column(name = "lottery_draw_count", columnDefinition="int(3) COMMENT '抽奖次数,默认0, 仅限当日使用, 0点清零' default '0'")
	public Integer getLotteryDrawCount() {
		return lotteryDrawCount;
	}
	public void setLotteryDrawCount(Integer lotteryDrawCount) {
		this.lotteryDrawCount = lotteryDrawCount;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", head="
				+ head + ", nickname=" + nickname + ", authority=" + authority + ", regtime=" + regtime + ", lasttime="
				+ lasttime + ", regip=" + regip + ", lastip=" + lastip + ", salt=" + salt + ", phone=" + phone
				+ ", currency=" + currency + ", referrerid=" + referrerid + ", money=" + money + ", freezemoney="
				+ freezemoney + ", isfreeze=" + isfreeze + ", sex=" + sex + ", sign=" + sign + ", version=" + version
				+ ", allSellWgight=" + allSellWgight + ", allOrderNumbe=" + allOrderNumbe + ", allIncomeMone="
				+ allIncomeMone + ", grade=" + grade + ", longitude=" + longitude + ", latitude=" + latitude
				+ ", dailishangUserid=" + dailishangUserid + ", wanggeUserid=" + wanggeUserid + ", lotteryDrawCount="
				+ lotteryDrawCount + "]";
	}
	
}